import axios from 'axios'
import { getToken } from './user'

// 创建axios实例
const request = axios.create({
  baseURL: '/api',
  timeout: 50000,
  headers: {
    'Content-Type': 'application/json'
  }
})

// 请求拦截器
request.interceptors.request.use(
  config => {
    // 添加token到请求头
    const token = getToken()
    if (token) {
      config.headers['Authorization'] = `Bearer ${token}`
      console.log('已添加token到请求头:', { url: config.url, token_exists: !!token })
    } else {
      console.log('请求无token:', config.url)
    }
    
    // 打印请求信息，便于调试
    console.log('发起请求:', config.url, config.params || config.data)
    return config
  },
  error => {
    console.error('请求拦截器错误:', error)
    return Promise.reject(error)
  }
)

// 响应拦截器
request.interceptors.response.use(
  response => {
    // 打印响应数据，便于调试
    console.log('接收响应:', response.config.url, response.data)
    
    // 检查响应状态码
    const resData = response.data
    if (resData && resData.code !== undefined) {
      // 处理业务错误
      if (resData.code !== 200) {
        console.error('业务错误:', resData.message || '未知错误')
      }
    }
    
    return response
  },
  error => {
    if (error.response) {
      // 处理token过期或未授权的情况
      if (error.response.status === 401 || error.response.status === 403) {
        console.warn('授权失败，清除登录信息，状态码:', error.response.status)
        // 清除本地token，并重定向到登录页
        localStorage.removeItem('token')
        localStorage.removeItem('userInfo')
        
        // 使用一个小延时确保状态更新后再跳转
        setTimeout(() => {
          window.location.href = '/login'
        }, 100)
      }
      
      console.error('请求错误:', error.response.status, error.response.data)
    } else if (error.request) {
      console.error('请求未收到响应:', error.request)
    } else {
      console.error('请求配置错误:', error.message)
    }
    return Promise.reject(error)
  }
)

export default request 